from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from users.models import Student


class Command(BaseCommand):
    help = '清理孤儿用户（有User记录但没有关联Student记录），保留管理员账号'

    def add_arguments(self, parser):
        parser.add_argument(
            '--dry-run',
            action='store_true',
            help='模拟运行，不实际删除',
        )

    def handle(self, *args, **options):
        dry_run = options['dry_run']

        # 查找孤儿用户（排除管理员）
        orphan_users = User.objects.filter(
            student__isnull=True,
            is_superuser=False  # 排除超级管理员
        )

        self.stdout.write(f"找到 {orphan_users.count()} 个非管理员孤儿用户")

        if dry_run:
            self.stdout.write("模拟运行模式，不会实际删除")

        deleted_count = 0
        for user in orphan_users:
            self.stdout.write(f"孤儿用户: {user.username} (ID: {user.id}, 创建时间: {user.date_joined})")

            if not dry_run:
                try:
                    user.delete()
                    self.stdout.write(f"✓ 已删除用户: {user.username}")
                    deleted_count += 1
                except Exception as e:
                    self.stderr.write(f"✗ 删除失败 {user.username}: {e}")

        if not dry_run:
            self.stdout.write(self.style.SUCCESS(f"清理完成！删除了 {deleted_count} 个非管理员孤儿用户"))

        # 显示保留的管理员信息（可选）
        admin_orphans = User.objects.filter(student__isnull=True, is_superuser=True)
        if admin_orphans.exists():
            self.stdout.write(f"\n保留的管理员账号 ({admin_orphans.count()} 个):")
            for admin in admin_orphans:
                self.stdout.write(f"  - {admin.username} (ID: {admin.id})")